﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CentroVentas.Forms.Productos
{
    public partial class FrmProductosCrear : Form
    {
        private bool _compra;
        private int _id;
        private int _iva;

        //private int[] ids;

        private int _idPrecio;

        public int IdPrecio
        {
            get { return _idPrecio; }
            set { _idPrecio = value; }
        }

        public int Iva
        {
            get { return _iva; }
            set { _iva = value; }
        }
        private int _utilidad;

        public int Utilidad
        {
            get { return _utilidad; }
            set { _utilidad = value; }
        }
        private int _cantidad;

        public int Cantidad
        {
            get { return _cantidad; }
            set { _cantidad = value; }
        }
        private int _minimo;

        public int Minimo
        {
            get { return _minimo; }
            set { _minimo = value; }
        }
        private int _tipo;

        public int Tipo
        {
            get { return _tipo; }
            set { _tipo = value; }
        }

        private string _codigo;

        public string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }
        private string _desc;

        public string Desc
        {
            get { return _desc; }
            set { _desc = value; }
        }
        private string _marca;

        public string Marca
        {
            get { return _marca; }
            set { _marca = value; }
        }
        private string _comentarios;

        public string Comentarios
        {
            get { return _comentarios; }
            set { _comentarios = value; }
        }
        private double _costo;

        public double Costo
        {
            get { return _costo; }
            set { _costo = value; }
        }
        private double _precio;

        public double Precio
        {
            get { return _precio; }
            set { _precio = value; }
        }

        public bool Compra
        {
            get { return _compra; }
            set { _compra = value; }
        }

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public FrmProductosCrear(bool compra)
        {
            InitializeComponent();
            _compra = compra;
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                txtCodBarras.Text = CVCore32.Class.Core.CodigoBarras.ConvertEAN(txtCodigo.Text, false, "");

            }
        }

        private void txtCosto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (txtCosto.Text.Length == 0)
            {
                txtCosto.Text = "0";
            }
            else
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }

        private void txtUtilidad_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (txtUtilidad.Text.Length == 0)
            {
                txtUtilidad.Text = "0";
            }
            else
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }

        private void txtCosto_TextChanged(object sender, EventArgs e)
        {
            if (txtCosto.Text.Length == 0)
            {
                txtCosto.Text = "0";
            }
            else
            {
                txtPrecio.Text = CVCore32.Class.Funciones.Productos.Precio.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                txtFormateado.Text = CVCore32.Class.Core.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
        }

        private void txtUtilidad_TextChanged(object sender, EventArgs e)
        {
            if (txtUtilidad.Text.Length == 0)
            {
                txtUtilidad.Text = "0";
            }
            else
            {
                if (!chkModificarPrecioFinal.Checked)
                {
                    txtPrecio.Text = CVCore32.Class.Funciones.Productos.Precio.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                    txtFormateado.Text = CVCore32.Class.Core.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));

                }
            }
        }

        private void chkModificarPrecioFinal_CheckedChanged(object sender, EventArgs e)
        {
            txtPrecio.ReadOnly = !chkModificarPrecioFinal.Checked;
        }

        private void txtImpuesto_TextChanged(object sender, EventArgs e)
        {
            if (txtImpuesto.Text.Length == 0)
            {
                txtImpuesto.Text = "0";
            }
            else
            {
                txtPrecio.Text = CVCore32.Class.Funciones.Productos.Precio.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                txtFormateado.Text = CVCore32.Class.Core.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
        }

        private void txtPrecio_TextChanged(object sender, EventArgs e)
        {
            if (chkModificarPrecioFinal.Checked)
            {
                if (txtPrecio.Text.Length == 0)
                {
                    txtPrecio.Text = "0";
                }


                txtUtilidad.Text = CVCore32.Class.Funciones.Productos.Precio.getUtilidad(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtPrecio.Text)).ToString();
                txtFormateado.Text = CVCore32.Class.Core.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
            else
            {
                if (txtPrecio.Text.Length == 0)
                {
                    txtPrecio.Text = "0";
                }
                txtFormateado.Text = CVCore32.Class.Core.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
        }

        private void txtImpuesto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtPrecio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtCantidad_ValueChanged(object sender, EventArgs e)
        {
            txtCMinima.Value = txtCantidad.Value / 4;
        }

        private void FrmProductosCrear_Load(object sender, EventArgs e)
        {
            try
            {
                txtMarca.LostFocus += new EventHandler(txtMarca_LostFocus);
                txtCodigo.Focus();

                if (!CVCore32.Class.Funciones.Productos.Producto.getMarcasTextBox(txtMarca))
                {
                    MessageBox.Show("Se encontro un problema al rescatar los datos.", "CentroVentas", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.DialogResult = System.Windows.Forms.DialogResult.Abort;
                    this.Close();
                }

                // Obtencion categorias

                List<CVCore32.Data.SubcategoriaProducto> sc = CVCore32.Class.Funciones.Productos.Categoria.GetSubCategorias();

                cboCategoria.DataSource = sc;
                cboCategoria.ValueMember = "IdSubcategoria";
                cboCategoria.DisplayMember = "NombreSubcategoria";

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        private void txtMarca_LostFocus(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtMarca.Text))
            {
                if (!CVCore32.Class.Funciones.Productos.Producto.ExisteMarca(txtMarca.Text))
                {
                    if (MessageBox.Show(this, "La marca: '" + txtMarca.Text + "' no existe, ¿desea crearla?", "CentroVentas", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        try
                        {
                            CVCore32.Class.Funciones.Productos.Producto.CrearMarca(txtMarca.Text);
                            txtMarca.AutoCompleteCustomSource.Add(txtMarca.Text);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "CentroVentas", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        }
                    }
                    else
                        txtMarca.Clear();
                }
            }
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {

            txtCodBarras.Text = CVCore32.Class.Core.CodigoBarras.ConvertEAN(txtCodigo.Text, false, "");
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrWhiteSpace(txtDescripcion.Text))
            {
                if (!String.IsNullOrWhiteSpace(txtMarca.Text))
                {
                    if (Convert.ToDouble(txtPrecio.Text) < Convert.ToDouble(txtCosto.Text))
                    {
                        if (MessageBox.Show(this, "El valor final del producto, es menor al costo, ¿Desea continuar?", this.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                        {
                            this.DialogResult = System.Windows.Forms.DialogResult.OK;
                            Codigo = txtCodigo.Text;
                            Desc = txtDescripcion.Text;
                            Costo = Convert.ToDouble(txtCosto.Text);
                            Utilidad = Convert.ToInt32(txtUtilidad.Text);
                            Iva = Convert.ToInt32(txtImpuesto.Text);
                            Precio = Convert.ToDouble(txtPrecio.Text);
                            if (rbtFisico.Checked) Tipo = 0;
                            if (rbtServicio.Checked) Tipo = 1;
                            Marca = txtMarca.Text;
                            Cantidad = Convert.ToInt32(txtCantidad.Value);
                            Minimo = Convert.ToInt32(txtCMinima.Value);
                            Comentarios = txtComentarios.Text;
                            try
                            {
                                //CREAR PRODUCTO
                                List<int> ids = new List<int>();
                                ids = CVCore32.Class.Funciones.Productos.Producto.CreaProducto(txtCodigo.Text, txtDescripcion.Text, 1, txtMarca.Text, txtComentarios.Text, Convert.ToInt32(txtCMinima.Value), Convert.ToDouble(txtCosto.Text), Convert.ToInt32(txtUtilidad.Text), Convert.ToInt32(txtImpuesto.Text), Convert.ToDouble(txtPrecio.Text), Convert.ToInt32(txtCantidad.Value), imageList1, Convert.ToInt32(cboCategoria.SelectedValue));
                                Id = ids[0];
                                IdPrecio = ids[1];
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                        }

                    }
                    else
                    {
                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                        Codigo = txtCodigo.Text;
                        Desc = txtDescripcion.Text;
                        Costo = Convert.ToDouble(txtCosto.Text);
                        Utilidad = Convert.ToInt32(txtUtilidad.Text);
                        Iva = Convert.ToInt32(txtImpuesto.Text);
                        Precio = Convert.ToDouble(txtPrecio.Text);
                        if (rbtFisico.Checked) Tipo = 0;
                        if (rbtServicio.Checked) Tipo = 1;
                        Marca = txtMarca.Text;
                        Cantidad = Convert.ToInt32(txtCantidad.Value);
                        Minimo = Convert.ToInt32(txtCMinima.Value);
                        Comentarios = txtComentarios.Text;
                        try
                        {
                            //CREAR PRODUCTO
                            List<int> ids = new List<int>();
                            ids = CVCore32.Class.Funciones.Productos.Producto.CreaProducto(txtCodigo.Text, txtDescripcion.Text, 1, txtMarca.Text, txtComentarios.Text, Convert.ToInt32(txtCMinima.Value), Convert.ToDouble(txtCosto.Text), Convert.ToInt32(txtUtilidad.Text), Convert.ToInt32(txtImpuesto.Text), Convert.ToDouble(txtPrecio.Text), Convert.ToInt32(txtCantidad.Value), imageList1,Convert.ToInt32(cboCategoria.SelectedValue));
                            Id = ids[0];
                            IdPrecio = ids[1];
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Dispose();
        }

        private void btnAddImg_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.AddExtension = false;
            ofd.CheckFileExists = true;
            ofd.Filter = "Imagenes (*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG";
            ofd.Multiselect = true;
            ofd.Title = "Seleccione imagenes";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                foreach (string arc in ofd.FileNames)
                {
                    imageList1.Images.Add(Image.FromFile(arc));
                }

                ImgList.View = View.LargeIcon;
                imageList1.ImageSize = new Size(100, 100);
                this.ImgList.LargeImageList = this.imageList1;


                ImgList.Items.Clear();

                for (int j = 0; j < this.imageList1.Images.Count; j++)
                {
                    ListViewItem item = new ListViewItem();
                    item.ImageIndex = j;
                    this.ImgList.Items.Add(item);
                }

            }

        }

        private void btnDelImg_Click(object sender, EventArgs e)
        {
            ImgList.Items.Remove(ImgList.SelectedItems[0]);
            imageList1.Images.RemoveAt(ImgList.SelectedItems[0].ImageIndex);
        }








    }
}
